#include <vector>
#include <iostream>

using namespace std;

int N, ans = 0x3f3f3f3f;

int offset[7] = {0};

void dfs(const vector<vector<int> > &mat, int level)
{
    if(level == N)
    {
        int maxx = -0x3f3f3f3f;
        for(int j=0;j<N;j++)
        {
            int sum = 0;
            for(int i=0;i<N;i++)
            {
                int idx = offset[i] + j;
                if(offset[i] + j >= N)
                    idx -= N;
                sum += mat[i][idx];
            }
            
            if(sum > ans)
                return;
            maxx = max(maxx, sum);
        }
        ans = min(maxx, ans);
        return;
    }
    for(int i=0;i<N;i++)
    {
        offset[level] = i;
        dfs(mat, level + 1);
    }
}

int main()
{
    while (cin >> N)
    {
        if (N == -1)
            break;
        vector<vector<int> > mat(N, vector<int>(N));
        for(int i=0;i<N;i++)
        for(int j=0;j<N;j++)
            cin >> mat[i][j];
        ans = 0x3f3f3f3f;
        dfs(mat, 1);
        cout << ans << endl;
    }
    return 0;
}